﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAOUsuario_logueado : DAO{
         //Atributos de manejo de instancia (singleton)
        static DAOUsuario_logueado instance = null;        
        // Atributos para acceso a los DataSet Tipados
        private DataSetConsultora.Usuario_logueadoDataTable Usuario_logueadoTabla = new DataSetConsultora.Usuario_logueadoDataTable();
        private Usuario_logueadoTableAdapter Usuario_logueadoTableAdapter = new Usuario_logueadoTableAdapter();

        public static DAOUsuario_logueado Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAOUsuario_logueado();
                        }
                    }
                }
                return instance;
            }
        }
        // Guardar y actualizar no implementados !!
        /*
        public Usuario_logueado guardar(Usuario_logueado unaUsuario_logueado, int id_pregunta)
        {

            // Inserto la Usuario_logueado en la db por medio de su correspondiente table adapter
            Usuario_logueadoTableAdapter.Insertar(unaUsuario_logueado._nro_documento, ..... COMPLETAR !!!
                                             );

            // Retorno la Usuario_logueado insertada
            return recolectarUno();
        }
        

        public void actualizar(Usuario_logueado unaUsuario_logueado)
        {

            // Actualizo la Historial Respuesta en la db pro medio de su table adapter
            Usuario_logueadoTableAdapter.Actualizar(unaUsuario_logueado._nro_documento, ..... COMPLETAR !!!
                                               );

        }
        */

        public List<Usuario_logueado> cargar()
        {

            // Cargo los Usuario_logueado de la db
            Usuario_logueadoTabla = Usuario_logueadoTableAdapter.GetData();

            // Finalmente devuelvo la lista de Usuario_logueadosCargados, recolectadas por la funcion            
            return recolectar();
        }

            
        private List<Usuario_logueado> recolectar()
        {

            // Creo la lista para recolectar y devolver los Usuario_logueados cargadas de la db
            List<Usuario_logueado> Usuario_logueadosCargados = new List<Usuario_logueado>();

            // Recorro los Usuario_logueados de la tabla
            foreach (DataSetConsultora.Usuario_logueadoRow unaUsuario_logueadoFila in Usuario_logueadoTabla)
            {

                // Creo un Usuario_logueado y lo agrego a la lista de Usuario_logueados cargados
                Usuario_logueadosCargados.Add(new Usuario_logueado(unaUsuario_logueadoFila.id,
                                                                   unaUsuario_logueadoFila.tipo_documento_id.ToString(),
                                                                   unaUsuario_logueadoFila.nro_documento,
                                                                   unaUsuario_logueadoFila.nombre, 
                                                                   unaUsuario_logueadoFila.apellido, 
                                                                   unaUsuario_logueadoFila.email, 
                                                                   unaUsuario_logueadoFila.genero.ToString(), 
                                                                   unaUsuario_logueadoFila.fecha_nacimiento, 
                                                                   unaUsuario_logueadoFila.escolariodad, 
                                                                   unaUsuario_logueadoFila.nacionalidad, 
                                                                   unaUsuario_logueadoFila.nro_empleado)
                                                                   );
                                        

            }

            return Usuario_logueadosCargados;
        }

        public Usuario_logueado recolectarUno()
        {

            // Finalmente retorno un nuevo objeto Empresa mapeado de la tabla
            return new Usuario_logueado(Usuario_logueadoTabla[0].id,
                                        Usuario_logueadoTabla[0].tipo_documento_id.ToString(),
                                        Usuario_logueadoTabla[0].nro_documento,
                                        Usuario_logueadoTabla[0].nombre,
                                        Usuario_logueadoTabla[0].apellido,
                                        Usuario_logueadoTabla[0].email,
                                        Usuario_logueadoTabla[0].genero.ToString(),
                                        Usuario_logueadoTabla[0].fecha_nacimiento,
                                        Usuario_logueadoTabla[0].escolariodad,
                                        Usuario_logueadoTabla[0].nacionalidad,
                                        Usuario_logueadoTabla[0].nro_empleado);


        }
    }
}
